package com.hbsi.demo1;

import java.sql.*;

/**
 * @author 程奕红
 * @version 1.0
 */
public class TestJDBC {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        geTAllinformation();
    }
    public static void geTAllinformation() throws ClassNotFoundException, SQLException {
        //1.载入驱动，将指定的驱动程序载入内容，并在驱动管理器中注册
        Class.forName("com.mysql.jdbc.Driver");
        //2.建立连接，将MySQL驱动程序和JDBC连接，创建Connect对象
        String url="jdbc:mysql://localhost:3306/Test";
        String username="root";
        String password="root";
        //DriverManager驱动器的管理器，用来管理驱动程序，并且负责(getConnection())创建链接对象
        //Connection的对象用来代表的是和数据库之间建立的链接对象。它(createStatement())可以用来创建语句对象
        Connection con= DriverManager.getConnection(url,username,password);
        System.out.println(con);
        //3.生成语句对象,负责提交sqL语句，调用连接对象con的createStatement（）方法创建语句对象（Statement)的对象
        //Statement的对象用来表示的是语句对象，负责提交SQL语句
        Statement statement=con.createStatement();
        String sql="select * from Student";
        //返回结果，处理返回结果，读取结果集
        ResultSet res=statement.executeQuery(sql);
        //executeQuery()提交查询select  返回结果集
        //executeUpdate()提交增、删、改、语句
        //注意：executeQuery()执行增删改返回的影响行数，所以这里返回的是一个整数
        //execute()提交所有的sql语句  返回true or  false
        while(res.next()){//ResultSet 中有next()方法，可以移动指针，刚开始指针指向第一个字段的前一个位置，这个方法让指针指向
            //下一行，如果下一行还有数据可以读，返回true,如果没有数据可以读，返回false
            System.out.println("用户id"+res.getInt(1));//ResultSet中还有很多的getXxx方法，根据创建的每个字段的数据类型
            //来返回每个字段的值
            //eg:数据库的姓名是字符串类型，我们就可以用getString()方法，参数列表是该字段所处的列
            //注意：这里下标从1开始，并不是以往的从0开始！！！
            System.out.println("用户名"+res.getString(2));
            System.out.println("用户年龄"+res.getInt(3));
        }
       int rows=statement.executeUpdate("insert into Student values(1,'花花','20')");//返回的是影响行数
        if(rows>=0){
            System.out.println("执行插入成功，成功插入了"+rows+"语句");
        }else{
            System.out.println("执行插入失败");
        }
        //4.释放资源，关闭对象
        //关闭的前先进行判断，是否返回为空
        if(res!=null){
            res.close();
        }
        if(statement!=null){
            statement.close();
        }
        if(con!=null){
            con.close();
        }

    }
}
